home *** CD-ROM | disk | FTP | other *** search
/ Young Minds / Young Minds Interactive CD-ROM.ISO / dungeon / clockr.f < prev    next >
Encoding:
Text File  |  1987-09-16  |  11.9 KB  |  587 lines

  1. C CEVAPP- CLOCK EVENT APPLICABLES
  2. C
  3. C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  4. C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  5. C WRITTEN BY R. M. SUPNIK
  6. C
  7. C DECLARATIONS
  8. C
  9.     SUBROUTINE CEVAPP(RI)
  10.     IMPLICIT INTEGER (A-Z)
  11.     INTEGER CNDTCK(10),LMPTCK(12)
  12.     LOGICAL FINDXT,LIT,RMDESC,QOPEN,MOVETO
  13.     LOGICAL F,QLEDGE,QVAIR,QHERE,PROB
  14. #include "gamestate.h"
  15. #include "state.h"
  16. #include "rooms.h"
  17. #include "rflag.h"
  18. #include "rindex.h"
  19. #include "objects.h"
  20. #include "oflags.h"
  21. #include "oindex.h"
  22. #include "clock.h"
  23. #include "curxt.h"
  24. #include "xsrch.h"
  25. #include "villians.h"
  26. #include "advers.h"
  27. #include "flags.h"
  28. C
  29. C FUNCTIONS AND DATA
  30. C
  31.     QOPEN(R)=(and(OFLAG2(R),OPENBT)).NE.0
  32.     QLEDGE(R)=(R.EQ.LEDG2).OR.(R.EQ.LEDG3).OR.(R.EQ.LEDG4).OR.
  33. &        (R.EQ.VLBOT)
  34.     QVAIR(R)=(R.EQ.VAIR1).OR.(R.EQ.VAIR2).OR.(R.EQ.VAIR3).OR.
  35. &         (R.EQ.VAIR4)
  36.     DATA CNDTCK/50,20,10,5,0,156,156,156,157,0/
  37.     DATA LMPTCK/50,30,20,10,4,0,154,154,154,154,155,0/
  38. C CEVAPP, PAGE 2
  39. C
  40.     IF(RI.EQ.0) RETURN
  41. C                        !IGNORE DISABLED.
  42.     GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
  43. &     11000,12000,13000,14000,15000,16000,17000,18000,19000,
  44. &     20000,21000,22000,23000,24000),RI
  45.     CALL BUG(3,RI)
  46. C
  47. C CEV1--    CURE CLOCK.  LET PLAYER SLOWLY RECOVER.
  48. C
  49. 1000    ASTREN(PLAYER)=MIN0(0,ASTREN(PLAYER)+1)
  50. C                        !RECOVER.
  51.     IF(ASTREN(PLAYER).GE.0) RETURN
  52. C                        !FULLY RECOVERED?
  53.     CTICK(CEVCUR)=30
  54. C                        !NO, WAIT SOME MORE.
  55.     RETURN
  56. C
  57. C CEV2--    MAINT-ROOM WITH LEAK.  RAISE THE WATER LEVEL.
  58. C
  59. 2000    IF(HERE.EQ.MAINT) CALL RSPEAK(71+(RVMNT/2))
  60. C                        !DESCRIBE.
  61.     RVMNT=RVMNT+1
  62. C                        !RAISE WATER LEVEL.
  63.     IF(RVMNT.LE.16) RETURN
  64. C                        !IF NOT FULL, EXIT.
  65.     CTICK(CEVMNT)=0
  66. C                        !FULL, DISABLE CLOCK.
  67.     RFLAG(MAINT)=or(RFLAG(MAINT),RMUNG)
  68.     RRAND(MAINT)=80
  69. C                        !SAY IT IS FULL OF WATER.
  70.     IF(HERE.EQ.MAINT) CALL JIGSUP(81)
  71. C                        !DROWN HIM IF PRESENT.
  72.     RETURN
  73. C
  74. C CEV3--    LANTERN.  DESCRIBE GROWING DIMNESS.
  75. C
  76. 3000    CALL LITINT(LAMP,ORLAMP,CEVLNT,LMPTCK,12)
  77. C                        !DO LIGHT INTERRUPT.
  78.     RETURN
  79. C
  80. C CEV4--    MATCH.  OUT IT GOES.
  81. C
  82. 4000    CALL RSPEAK(153)
  83. C                        !MATCH IS OUT.
  84.     OFLAG1(MATCH)=and(OFLAG1(MATCH), not(ONBT))
  85.     RETURN
  86. C
  87. C CEV5--    CANDLE.  DESCRIBE GROWING DIMNESS.
  88. C
  89. 5000    CALL LITINT(CANDL,ORCAND,CEVCND,CNDTCK,10)
  90. C                        !DO CANDLE INTERRUPT.
  91.     RETURN
  92. C CEVAPP, PAGE 3
  93. C
  94. C CEV6--    BALLOON
  95. C
  96. 6000    CTICK(CEVBAL)=3
  97. C                        !RESCHEDULE INTERRUPT.
  98.     F=AVEHIC(WINNER).EQ.BALLO
  99. C                        !SEE IF IN BALLOON.
  100.     IF(BLOC.EQ.VLBOT) GO TO 6800
  101. C                        !AT BOTTOM?
  102.     IF(QLEDGE(BLOC)) GO TO 6700
  103. C                        !ON LEDGE?
  104.     IF(QOPEN(RECEP).AND.(BINFF.NE.0))
  105. &        GO TO 6500
  106. C
  107. C BALLOON IS IN MIDAIR AND IS DEFLATED (OR HAS RECEPTACLE CLOSED).
  108. C FALL TO NEXT ROOM.
  109. C
  110.     IF(BLOC.NE.VAIR1) GO TO 6300
  111. C                        !IN VAIR1?
  112.     BLOC=VLBOT
  113. C                        !YES, NOW AT VLBOT.
  114.     CALL NEWSTA(BALLO,0,BLOC,0,0)
  115.     IF(F) GO TO 6200
  116. C                        !IN BALLOON?
  117.     IF(QLEDGE(HERE)) CALL RSPEAK(530)
  118. C                        !ON LEDGE, DESCRIBE.
  119.     RETURN
  120. C
  121. 6200    F=MOVETO(BLOC,WINNER)
  122. C                        !MOVE HIM.
  123.     IF(BINFF.EQ.0) GO TO 6250
  124. C                        !IN BALLOON.  INFLATED?
  125.     CALL RSPEAK(531)
  126. C                        !YES, LANDED.
  127.     F=RMDESC(0)
  128. C                        !DESCRIBE.
  129.     RETURN
  130. C
  131. 6250    CALL NEWSTA(BALLO,532,0,0,0)
  132. C                        !NO, BALLOON & CONTENTS DIE.
  133.     CALL NEWSTA(DBALL,0,BLOC,0,0)
  134. C                        !INSERT DEAD BALLOON.
  135.     AVEHIC(WINNER)=0
  136. C                        !NOT IN VEHICLE.
  137.     CFLAG(CEVBAL)=.FALSE.
  138. C                        !DISABLE INTERRUPTS.
  139.     CFLAG(CEVBRN)=.FALSE.
  140.     BINFF=0
  141.     BTIEF=0
  142.     RETURN
  143. C
  144. 6300    BLOC=BLOC-1
  145. C                        !NOT IN VAIR1, DESCEND.
  146.     CALL NEWSTA(BALLO,0,BLOC,0,0)
  147.     IF(F) GO TO 6400
  148. C                        !IS HE IN BALLOON?
  149.     IF(QLEDGE(HERE)) CALL RSPEAK(533)
  150. C                        !IF ON LEDGE, DESCRIBE.
  151.     RETURN
  152. C
  153. 6400    F=MOVETO(BLOC,WINNER)
  154. C                        !IN BALLOON, MOVE HIM.
  155.     CALL RSPEAK(534)
  156. C                        !DESCRIBE.
  157.     F=RMDESC(0)
  158.     RETURN
  159. C
  160. C BALLOON IS IN MIDAIR AND IS INFLATED, UP-UP-AND-AWAY
  161. C                        !
  162. C
  163. 6500    IF(BLOC.NE.VAIR4) GO TO 6600
  164. C                        !AT VAIR4?
  165.     CTICK(CEVBRN)=0
  166.     CTICK(CEVBAL)=0
  167.     BINFF=0
  168.     BTIEF=0
  169.     BLOC=VLBOT
  170. C                        !FALL TO BOTTOM.
  171.     CALL NEWSTA(BALLO,0,0,0,0)
  172. C                        !BALLOON & CONTENTS DIE.
  173.     CALL NEWSTA(DBALL,0,BLOC,0,0)
  174. C                        !SUBSTITUTE DEAD BALLOON.
  175.     IF(F) GO TO 6550
  176. C                        !WAS HE IN IT?
  177.     IF(QLEDGE(HERE)) CALL RSPEAK(535)
  178. C                        !IF HE CAN SEE, DESCRIBE.
  179.     RETURN
  180. C
  181. 6550    CALL JIGSUP(536)
  182. C                        !IN BALLOON AT CRASH, DIE.
  183.     RETURN
  184. C
  185. 6600    BLOC=BLOC+1
  186. C                        !NOT AT VAIR4, GO UP.
  187.     CALL NEWSTA(BALLO,0,BLOC,0,0)
  188.     IF(F) GO TO 6650
  189. C                        !IN BALLOON?
  190.     IF(QLEDGE(HERE)) CALL RSPEAK(537)
  191. C                        !CAN HE SEE IT?
  192.     RETURN
  193. C
  194. 6650    F=MOVETO(BLOC,WINNER)
  195. C                        !MOVE PLAYER.
  196.     CALL RSPEAK(538)
  197. C                        !DESCRIBE.
  198.     F=RMDESC(0)
  199.     RETURN
  200. C
  201. C ON LEDGE, GOES TO MIDAIR ROOM WHETHER INFLATED OR NOT.
  202. C
  203. 6700    BLOC=BLOC+(VAIR2-LEDG2)
  204. C                        !MOVE TO MIDAIR.
  205.     CALL NEWSTA(BALLO,0,BLOC,0,0)
  206.     IF(F) GO TO 6750
  207. C                        !IN BALLOON?
  208.     IF(QLEDGE(HERE)) CALL RSPEAK(539)
  209. C                        !NO, STRANDED.
  210.     CTICK(CEVVLG)=10
  211. C                        !MATERIALIZE GNOME.
  212.     RETURN
  213. C
  214. 6750    F=MOVETO(BLOC,WINNER)
  215. C                        !MOVE TO NEW ROOM.
  216.     CALL RSPEAK(540)
  217. C                        !DESCRIBE.
  218.     F=RMDESC(0)
  219.     RETURN
  220. C
  221. C AT BOTTOM, GO UP IF INFLATED, DO NOTHING IF DEFLATED.
  222. C
  223. 6800    IF((BINFF.EQ.0).OR..NOT.QOPEN(RECEP)) RETURN
  224.     BLOC=VAIR1
  225. C                        !INFLATED AND OPEN,
  226.     CALL NEWSTA(BALLO,0,BLOC,0,0)
  227. C                        !GO UP TO VAIR1.
  228.     IF(F) GO TO 6850
  229. C                        !IN BALLOON?
  230.     IF(QLEDGE(HERE)) CALL RSPEAK(541)
  231. C                        !IF CAN SEE, DESCRIBE.
  232.     RETURN
  233. C
  234. 6850    F=MOVETO(BLOC,WINNER)
  235. C                        !MOVE PLAYER.
  236.     CALL RSPEAK(542)
  237.     F=RMDESC(0)
  238.     RETURN
  239. C CEVAPP, PAGE 4
  240. C
  241. C CEV7--    BALLOON BURNUP
  242. C
  243. 7000    DO 7100 I=1,OLNT
  244. C                        !FIND BURNING OBJECT
  245.       IF((RECEP.EQ.OCAN(I)).AND.((and(OFLAG1(I),FLAMBT)).NE.0))
  246. &        GO TO 7200
  247. 7100    CONTINUE
  248.     CALL BUG(4,0)
  249. C
  250. 7200    CALL NEWSTA(I,0,0,0,0)
  251. C                        !VANISH OBJECT.
  252.     BINFF=0
  253. C                        !UNINFLATED.
  254.     IF(HERE.EQ.BLOC) CALL RSPSUB(292,ODESC2(I))
  255. C                        !DESCRIBE.
  256.     RETURN
  257. C
  258. C CEV8--    FUSE FUNCTION
  259. C
  260. 8000    IF(OCAN(FUSE).NE.BRICK) GO TO 8500
  261. C                        !IGNITED BRICK?
  262.     BR=OROOM(BRICK)
  263. C                        !GET BRICK ROOM.
  264.     BC=OCAN(BRICK)
  265. C                        !GET CONTAINER.
  266.     IF((BR.EQ.0).AND.(BC.NE.0)) BR=OROOM(BC)
  267.     CALL NEWSTA(FUSE,0,0,0,0)
  268. C                        !KILL FUSE.
  269.     CALL NEWSTA(BRICK,0,0,0,0)
  270. C                        !KILL BRICK.
  271.     IF((BR.NE.0).AND.(BR.NE.HERE)) GO TO 8100
  272. C                        !BRICK ELSEWHERE?
  273. C
  274.     RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
  275.     RRAND(HERE)=114
  276. C                        !MUNG ROOM.
  277.     CALL JIGSUP(150)
  278. C                        !DEAD.
  279.     RETURN
  280. C
  281. 8100    CALL RSPEAK(151)
  282. C                        !BOOM.
  283.     MUNGRM=BR
  284. C                        !SAVE ROOM THAT BLEW.
  285.     CTICK(CEVSAF)=5
  286. C                        !SET SAFE INTERRUPT.
  287.     IF(BR.NE.MSAFE) GO TO 8200
  288. C                        !BLEW SAFE ROOM?
  289.     IF(BC.NE.SSLOT) RETURN
  290. C                        !WAS BRICK IN SAFE?
  291.     CALL NEWSTA(SSLOT,0,0,0,0)
  292. C                        !KILL SLOT.
  293.     OFLAG2(SAFE)=or(OFLAG2(SAFE),OPENBT)
  294.     SAFEF=.TRUE.
  295. C                        !INDICATE SAFE BLOWN.
  296.     RETURN
  297. C
  298. 8200    DO 8250 I=1,OLNT
  299. C                        !BLEW WRONG ROOM.
  300.       IF(QHERE(I,BR) .AND. ((and(OFLAG1(I),TAKEBT)).NE.0))
  301. &        CALL NEWSTA(I,0,0,0,0)
  302. 8250    CONTINUE
  303.     IF(BR.NE.LROOM) RETURN
  304. C                        !BLEW LIVING ROOM?
  305.     DO 8300 I=1,OLNT
  306.       IF(OCAN(I).EQ.TCASE) CALL NEWSTA(I,0,0,0,0)
  307. C                        !KILL TROPHY CASE.
  308. 8300    CONTINUE
  309.     RETURN
  310. C
  311. 8500    IF(QHERE(FUSE,HERE).OR.(OADV(FUSE).EQ.WINNER))
  312. &        CALL RSPEAK(152)
  313.     CALL NEWSTA(FUSE,0,0,0,0)
  314. C                        !KILL FUSE.
  315.     RETURN
  316. C CEVAPP, PAGE 5
  317. C
  318. C CEV9--    LEDGE MUNGE.
  319. C
  320. 9000    RFLAG(LEDG4)=or(RFLAG(LEDG4),RMUNG)
  321.     RRAND(LEDG4)=109
  322.     IF(HERE.EQ.LEDG4) GO TO 9100
  323. C                        !WAS HE THERE?
  324.     CALL RSPEAK(110)
  325. C                        !NO, NARROW ESCAPE.
  326.     RETURN
  327. C
  328. 9100    IF(AVEHIC(WINNER).NE.0) GO TO 9200
  329. C                        !IN VEHICLE?
  330.     CALL JIGSUP(111)
  331. C                        !NO, DEAD.
  332.     RETURN
  333. C
  334. 9200    IF(BTIEF.NE.0) GO TO 9300
  335. C                        !TIED TO LEDGE?
  336.     CALL RSPEAK(112)
  337. C                        !NO, NO PLACE TO LAND.
  338.     RETURN
  339. C
  340. 9300    BLOC=VLBOT
  341. C                        !YES, CRASH BALLOON.
  342.     CALL NEWSTA(BALLO,0,0,0,0)
  343. C                        !BALLOON & CONTENTS DIE.
  344.     CALL NEWSTA(DBALL,0,BLOC,0,0)
  345. C                        !INSERT DEAD BALLOON.
  346.     BTIEF=0
  347.     BINFF=0
  348.     CFLAG(CEVBAL)=.FALSE.
  349.     CFLAG(CEVBRN)=.FALSE.
  350.     CALL JIGSUP(113)
  351. C                        !DEAD
  352.     RETURN
  353. C
  354. C CEV10--    SAFE MUNG.
  355. C
  356. 10000    RFLAG(MUNGRM)=or(RFLAG(MUNGRM),RMUNG)
  357.     RRAND(MUNGRM)=114
  358.     IF(HERE.EQ.MUNGRM) GO TO 10100
  359. C                        !IS HE PRESENT?
  360.     CALL RSPEAK(115)
  361. C                        !LET HIM KNOW.
  362.     IF(MUNGRM.EQ.MSAFE) CTICK(CEVLED)=8
  363. C                        !START LEDGE CLOCK.
  364.     RETURN
  365. C
  366. 10100    I=116
  367. C                        !HE'S DEAD,
  368.     IF((and(RFLAG(HERE),RHOUSE)).NE.0) I=117
  369.     CALL JIGSUP(I)
  370. C                        !LET HIM KNOW.
  371.     RETURN
  372. C CEVAPP, PAGE 6
  373. C
  374. C CEV11--    VOLCANO GNOME
  375. C
  376. 11000    IF(QLEDGE(HERE)) GO TO 11100
  377. C                        !IS HE ON LEDGE?
  378.     CTICK(CEVVLG)=1
  379. C                        !NO, WAIT A WHILE.
  380.     RETURN
  381. C
  382. 11100    CALL NEWSTA(GNOME,118,HERE,0,0)
  383. C                        !YES, MATERIALIZE GNOME.
  384.     RETURN
  385. C
  386. C CEV12--    VOLCANO GNOME DISAPPEARS
  387. C
  388. 12000    CALL NEWSTA(GNOME,149,0,0,0)
  389. C                        !DISAPPEAR THE GNOME.
  390.     RETURN
  391. C
  392. C CEV13--    BUCKET.
  393. C
  394. 13000    IF(OCAN(WATER).EQ.BUCKE)
  395. &        CALL NEWSTA(WATER,0,0,0,0)
  396.     RETURN
  397. C
  398. C CEV14--    SPHERE.  IF EXPIRES, HE'S TRAPPED.
  399. C
  400. 14000    RFLAG(CAGER)=or(RFLAG(CAGER),RMUNG)
  401.     RRAND(CAGER)=147
  402.     CALL JIGSUP(148)
  403. C                        !MUNG PLAYER.
  404.     RETURN
  405. C
  406. C CEV15--    END GAME HERALD.
  407. C
  408. 15000    ENDGMF=.TRUE.
  409. C                        !WE'RE IN ENDGAME.
  410.     CALL RSPEAK(119)
  411. C                        !INFORM OF ENDGAME.
  412.     RETURN
  413. C CEVAPP, PAGE 7
  414. C
  415. C CEV16--    FOREST MURMURS
  416. C
  417. 16000    CFLAG(CEVFOR)=(HERE.EQ.MTREE).OR.
  418. &        ((HERE.GE.FORE1).AND.(HERE.LT.CLEAR))
  419.     IF(CFLAG(CEVFOR).AND.PROB(10,10)) CALL RSPEAK(635)
  420.     RETURN
  421. C
  422. C CEV17--    SCOL ALARM
  423. C
  424. 17000    IF(HERE.EQ.BKTWI) CFLAG(CEVZGI)=.TRUE.
  425. C                        !IF IN TWI, GNOME.
  426.     IF(HERE.EQ.BKVAU) CALL JIGSUP(636)
  427. C                        !IF IN VAU, DEAD.
  428.     RETURN
  429. C
  430. C CEV18--    ENTER GNOME OF ZURICH
  431. C
  432. 18000    CFLAG(CEVZGO)=.TRUE.
  433. C                        !EXITS, TOO.
  434.     CALL NEWSTA(ZGNOM,0,BKTWI,0,0)
  435. C                        !PLACE IN TWI.
  436.     IF(HERE.EQ.BKTWI) CALL RSPEAK(637)
  437. C                        !ANNOUNCE.
  438.     RETURN
  439. C
  440. C CEV19--    EXIT GNOME
  441. C
  442. 19000    CALL NEWSTA(ZGNOM,0,0,0,0)
  443. C                        !VANISH.
  444.     IF(HERE.EQ.BKTWI) CALL RSPEAK(638)
  445. C                        !ANNOUNCE.
  446.     RETURN
  447. C CEVAPP, PAGE 8
  448. C
  449. C CEV20--    START OF ENDGAME
  450. C
  451. 20000    IF(SPELLF) GO TO 20200
  452. C                        !SPELL HIS WAY IN?
  453.     IF(HERE.NE.CRYPT) RETURN
  454. C                        !NO, STILL IN TOMB?
  455.     IF(.NOT.LIT(HERE)) GO TO 20100
  456. C                        !LIGHTS OFF?
  457.     CTICK(CEVSTE)=3
  458. C                        !RESCHEDULE.
  459.     RETURN
  460. C
  461. 20100    CALL RSPEAK(727)
  462. C                        !ANNOUNCE.
  463. 20200    DO 20300 I=1,OLNT
  464. C                        !STRIP HIM OF OBJS.
  465.       CALL NEWSTA(I,0,OROOM(I),OCAN(I),0)
  466. 20300    CONTINUE
  467.     CALL NEWSTA(LAMP,0,0,0,PLAYER)
  468. C                        !GIVE HIM LAMP.
  469.     CALL NEWSTA(SWORD,0,0,0,PLAYER)
  470. C                        !GIVE HIM SWORD.
  471. C
  472.     OFLAG1(LAMP)=and((or(OFLAG1(LAMP),LITEBT)), not(ONBT))
  473.     OFLAG2(LAMP)=or(OFLAG2(LAMP),TCHBT)
  474.     CFLAG(CEVLNT)=.FALSE.
  475. C                        !LAMP IS GOOD AS NEW.
  476.     CTICK(CEVLNT)=350
  477.     ORLAMP=0
  478.     OFLAG2(SWORD)=or(OFLAG2(SWORD),TCHBT)
  479.     SWDACT=.TRUE.
  480.     SWDSTA=0
  481. C
  482.     THFACT=.FALSE.
  483. C                        !THIEF GONE.
  484.     ENDGMF=.TRUE.
  485. C                        !ENDGAME RUNNING.
  486.     CFLAG(CEVMAT)=.FALSE.
  487. C                        !MATCHES GONE,
  488.     CFLAG(CEVCND)=.FALSE.
  489. C                        !CANDLES GONE.
  490. C
  491.     CALL SCRUPD(RVAL(CRYPT))
  492. C                        !SCORE CRYPT,
  493.     RVAL(CRYPT)=0
  494. C                        !BUT ONLY ONCE.
  495.     F=MOVETO(TSTRS,WINNER)
  496. C                        !TO TOP OF STAIRS,
  497.     F=RMDESC(3)
  498. C                        !AND DESCRIBE.
  499.     RETURN
  500. C                        !BAM
  501. C                        !
  502. C
  503. C CEV21--    MIRROR CLOSES.
  504. C
  505. 21000    MRPSHF=.FALSE.
  506. C                        !BUTTON IS OUT.
  507.     MROPNF=.FALSE.
  508. C                        !MIRROR IS CLOSED.
  509.     IF(HERE.EQ.MRANT) CALL RSPEAK(728)
  510. C                        !DESCRIBE BUTTON.
  511.     IF((HERE.EQ.INMIR).OR.(MRHERE(HERE).EQ.1))
  512. &        CALL RSPEAK(729)
  513.     RETURN
  514. C CEVAPP, PAGE 9
  515. C
  516. C CEV22--    DOOR CLOSES.
  517. C
  518. 22000    IF(WDOPNF) CALL RSPEAK(730)
  519. C                        !DESCRIBE.
  520.     WDOPNF=.FALSE.
  521. C                        !CLOSED.
  522.     RETURN
  523. C
  524. C CEV23--    INQUISITOR'S QUESTION
  525. C
  526. 23000    IF(AROOM(PLAYER).NE.FDOOR) RETURN
  527. C                        !IF PLAYER LEFT, DIE.
  528.     CALL RSPEAK(769)
  529.     CALL RSPEAK(770+QUESNO)
  530.     CTICK(CEVINQ)=2
  531.     RETURN
  532. C
  533. C CEV24--    MASTER FOLLOWS
  534. C
  535. 24000    IF(AROOM(AMASTR).EQ.HERE) RETURN
  536. C                        !NO MOVEMENT, DONE.
  537.     IF((HERE.NE.CELL).AND.(HERE.NE.PCELL)) GO TO 24100
  538.     IF(FOLLWF) CALL RSPEAK(811)
  539. C                        !WONT GO TO CELLS.
  540.     FOLLWF=.FALSE.
  541.     RETURN
  542. C
  543. 24100    FOLLWF=.TRUE.
  544. C                        !FOLLOWING.
  545.     I=812
  546. C                        !ASSUME CATCHES UP.
  547.     DO 24200 J=XMIN,XMAX,XMIN
  548.       IF(FINDXT(J,AROOM(AMASTR)).AND.(XROOM1.EQ.HERE))
  549. &        I=813
  550. 24200    CONTINUE
  551.     CALL RSPEAK(I)
  552.     CALL NEWSTA(MASTER,0,HERE,0,0)
  553. C                        !MOVE MASTER OBJECT.
  554.     AROOM(AMASTR)=HERE
  555. C                        !MOVE MASTER PLAYER.
  556.     RETURN
  557. C
  558.     END
  559. C LITINT-    LIGHT INTERRUPT PROCESSOR
  560. C
  561. C DECLARATIONS
  562. C
  563.     SUBROUTINE LITINT(OBJ,CTR,CEV,TICKS,TICKLN)
  564.     IMPLICIT INTEGER (A-Z)
  565.     INTEGER TICKS(TICKLN)
  566. #include "gamestate.h"
  567. #include "objects.h"
  568. #include "oflags.h"
  569. #include "clock.h"
  570. C
  571.     CTR=CTR+1
  572. C                        !ADVANCE STATE CNTR.
  573.     CTICK(CEV)=TICKS(CTR)
  574. C                        !RESET INTERRUPT.
  575.     IF(CTICK(CEV).NE.0) GO TO 100
  576. C                        !EXPIRED?
  577.     OFLAG1(OBJ)=and(OFLAG1(OBJ), not(LITEBT+FLAMBT+ONBT))
  578.     IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
  579. &        CALL RSPSUB(293,ODESC2(OBJ))
  580.     RETURN
  581. C
  582. 100    IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
  583. &        CALL RSPEAK(TICKS(CTR+(TICKLN/2)))
  584.     RETURN
  585. C
  586.     END
  587.